IOS  Swift 3 네 가지 단일 모드 상세 설명 및 인 스 턴 스

1932 단어 Swift일례
Swift 3 단일 모드
흔히 볼 수 있 는 몇 가지 방법 이 있어 요.
첫 번 째 는 터 질 정도 로 간단 해 요.

final class Single: NSObject { 
  static let shared = Single() 
  private override init() {} 
} 

final 키워드 의 역할 은 이런 종류 나 방법 으로 계승 되 고 다시 쓰 기 를 원 하지 않 는 다 는 것 이다.
두 번 째

public extension DispatchQueue { 
  private static var onceToken = [String]() 
  public class func once(_ token: String, _ block: () -> Void) { 
    objc_sync_enter(self) 
    defer { 
      objc_sync_exit(self) 
    } 
    if onceToken.contains(token) { 
      return 
    } 
    onceToken.append(token) 
    block() 
  } 
} 
 
final class Single2: NSObject { 
  static func shared() -> Single2 { 
    struct Singleton { 
      static var single: Single2? 
    } 
    DispatchQueue.once(NSUUID().uuidString) { 
      Singleton.single = shared() 
    } 
    return Singleton.single! 
  } 
} 
두 번 째 는 OC 스타일 의 단일 사례 이지 만 Swift 3 에서 원래 의 dispatch 를 폐기 하 였 습 니 다.once_t,그래서 먼저 DispatchQueue 에 extension 을 추가 하여 원래 의 dispatch 를 실현 해 야 합 니 다.once_t 효과
제3 종

private let single = Single3() 
final class Single3: NSObject { 
  static var shared: Single3 { 
    return single 
  } 
} 

Swift 3 에서 권한 제 어 를 강 화 했 기 때문에 private override init()를 다시 쓰 는 방법 이 잘못 되 었 을 수 있 기 때문에 Swift 3 에서 보안 을 알 수 없습니다.
네 번 째

final class Single4: NSObject { 
  static var shared: Single4 { 
    struct Static { 
      static let instance: Single4 = Single4() 
    } 
    return Static.instance 
  } 
  private override init() {} 
} 

방법 내 에서 정적 변 수 를 정의 합 니 다.
읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기